<script>
    let tree = [
        {
            id: 1,
            name: "北京",
            parentId: 0
        },
        {
            id: 2,
            name: "安徽",
            parentId: 0,
            children: [
                {
                    id: 4,
                    name: "合肥",
                    parentId: 2,
                },
                {
                    id: 5,
                    name: "滁州",
                    parentId: 2,
                    children:[
                        {
                            id:8,
                            name: "全椒",
                            parentId: 5
                        }
                    ]
                }
            ]
        },
        {
            id: 3,
            name: "江苏",
            parentId: 0,
            children: [
                {
                    id: 6,
                    name: "南京",
                    parentId: 3
                },
                {
                    id: 7,
                    name: "苏州",
                    parentId: 3
                }
            ]
        }
    ]

    function flatTree(data, attr = 'children') {
        // 声明一个数组,存储扁平之后的数据
        let flatArr = []
        // recursion 递归处理函数
        function recursion(arr) {
            arr.forEach(item => {
                // 判断是否有子节点
                if (item[attr] && item[attr].length > 0) {
                    recursion(item[attr])
                }
                // 过滤掉子节点属性名,避免扁平化之后还有子节点
                let keys = Object.keys(item)
                keys = keys.filter(key => key !== attr)
                // 重新声明一个对象,将item对应的公共属性添加到这个对象里
                let obj = {}
                keys.forEach(key => {
                    obj[key] = item[key]
                    
                })
                flatArr.push(obj)
            });
        }
        recursion(data)
        return flatArr
    }

    let res = flatTree(tree)
    console.log(res);

</script>